<script setup lang="ts">
import {ref} from 'vue'
import {FormRules} from 'naive-ui'
import {
  StnIpt,
  IptTypeConst,
  useTipStore,
  TipMessageTypeConst,
} from 'st-ui-vue3-navie'
import {ResObjPropNameConst} from 'st-common-req'
import {ResponsiveDialogForm} from '@components'
import {DictFormDefault} from '../consts/dict-form-default'
import {DictObjPropNameEnum} from '../enums/dict-obj-prop-name-enum.ts'
import {DictIptPropsPathEnum} from '../enums/dict-ipt-props-path-enum.ts'

/**
 * 组件参数
 */
const {
  isAdd = false,
} = defineProps<{
  // 是否为新增字典信息
  isAdd?: boolean;
}>()

/**
 * 组件双向绑定
 */
// 是否显示对话框
const show = defineModel<boolean>('show', {default: true})
// 表单数据
const form = defineModel<Record<string, any>>('form', {default: {...DictFormDefault}})

// 表单验证规则
const rules: FormRules = {
  [DictObjPropNameEnum.NAME]: {
    required: true,
    message: '请输入字典名称',
    trigger: 'blur',
  },
  [DictObjPropNameEnum.CODE]: {
    required: true,
    message: '请输入字典编码',
    trigger: 'blur',
  },
}

// 表单加载状态
const formLoading = ref(false)

/**
 * 保存字典信息
 */
const saveDictInfo = async (formData: typeof DictFormDefault) => {
  formLoading.value = true
  try {
    // TODO: 实现保存逻辑
    useTipStore().message('保存成功', TipMessageTypeConst.SUCCESS)
    show.value = false
  } catch (error) {
    useTipStore().message('保存失败', TipMessageTypeConst.ERROR)
  } finally {
    formLoading.value = false
  }
}
</script>

<template>
  <ResponsiveDialogForm
    :title="isAdd ? '新增字典' : '编辑字典'"
    :cols="1"
    v-model:show="show"
    v-model:form="form"
    :rules="rules"
    :submit-handler="saveDictInfo"
  >
    <!--<n-gi>-->
    <!--  <StnIpt-->
    <!--    v-model:value="form[DictObjPropNameEnum.NAME]"-->
    <!--    :predefine-props="DictIptPropsPathEnum.NAME"-->
    <!--  />-->
    <!--</n-gi>-->
    <!--<n-gi>-->
    <!--  <StnIpt-->
    <!--    v-model:value="form[DictObjPropNameEnum.CODE]"-->
    <!--    :predefine-props="DictIptPropsPathEnum.CODE"-->
    <!--  />-->
    <!--</n-gi>-->
    <!--<n-gi>-->
    <!--  <StnIpt-->
    <!--    :value="!form[DictObjPropNameEnum.DISABLED]"-->
    <!--    @update:value="() => form[DictObjPropNameEnum.DISABLED] = !form[DictObjPropNameEnum.DISABLED]"-->
    <!--    :type="IptTypeConst.SWITCH"-->
    <!--    :predefine-props="DictIptPropsPathEnum.DISABLED_SWITCH"-->
    <!--  />-->
    <!--</n-gi>-->
    <!--<n-gi>-->
    <!--  <StnIpt-->
    <!--    v-model:value="form[DictObjPropNameEnum.SORT]"-->
    <!--    :type="IptTypeConst.INPUT_NUMBER"-->
    <!--    :predefine-props="DictIptPropsPathEnum.SORT"-->
    <!--  />-->
    <!--</n-gi>-->
    <!--<n-gi>-->
    <!--  <StnIpt-->
    <!--    v-model:value="form[DictObjPropNameEnum.REMARK]"-->
    <!--    :predefine-props="DictIptPropsPathEnum.REMARK"-->
    <!--  />-->
    <!--</n-gi>-->
    <n-gi>

    </n-gi>
  </ResponsiveDialogForm>
</template>
